package com.utils;

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;

public class BccUtil {

    /**
     * 异或检验
     * return 校验值
     */


//    public static void main(String[] args) {
//
//        ByteBuf bf = Unpooled.buffer(10, 100);
//
////        bf.writeBoolean(true);
////        bf.writeInt(666);
////        bf.writeInt(777);
////        bf.writeInt(888);
////        System.out.println(bcc(bf));
////
////        System.out.println(bf.readByte());
////        System.out.println(bf.readBoolean());
////        System.out.println(bf.readInt());
////        System.out.println(bf.readBytes("02".getBytes(StandardCharsets.UTF_8)));
//
//        System.out.println(getBCC("02 57 4f 52 4b 50 33 30 33"));
//
//    }
//
//
//    /**
//     * BCC校验(异或校验)
//     */
//
//
//
//    /**
//     * Byte字节转Hex
//     *
//     * @param b 字节
//     * @return Hex
//     */
//    public static String byteToHex(byte b) {
//        String hexString = Integer.toHexString(b & 0xFF);
//        //由于十六进制是由0~9、A~F来表示1~16，所以如果Byte转换成Hex后如果是<16,就会是一个字符（比如A=10），通常是使用两个字符来表示16进制位的,
//        //假如一个字符的话，遇到字符串11，这到底是1个字节，还是1和1两个字节，容易混淆，如果是补0，那么1和1补充后就是0101，11就表示纯粹的11
//        if (hexString.length() < 2) {
//            hexString = new StringBuilder(String.valueOf(0)).append(hexString).toString();
//        }
//        return hexString.toUpperCase();
//    }

    public static String getBCC(String data) {
        String ret = "";
        byte BCC[] = new byte[1];


//        for (int i = 0; i < data.length(); i++) {
//            BCC[0] = (byte) (BCC[0] ^ data[i]);
//        }


        String hex = Integer.toHexString(BCC[0] & 0xFF);
        if (hex.length() == 1) {
            hex = '0' + hex;
        }
        ret += hex.toUpperCase();
        return ret;
    }



    /**
     * 转换16位
     */
    public int toSixteenBit(byte[] para) {
        byte high = (byte) (0x000000FF & para[0]);
        byte low = (byte) (0x000000FF & para[1]);
        int dataLToInt = (int) (((high & 0x000000FF) << 8) | (0x000000FF & low));
        return dataLToInt;
    }


}
